<?php

declare(strict_types=1);

namespace App\Middlewares;

use App\Traits\ResponseTrait;
use flight\Engine;

/**
 * Clase base para todos los middlewares.
 */
abstract class BaseMiddleware
{
    use ResponseTrait;

    /**
     * Constructor heredado de la clase.
     */
    public function __construct(private Engine $app) {}

    /**
     * Obtiene una instancia de la aplicación.
     */
    protected function app(): Engine
    {
        return $this->app;
    }

    /**
     * Método abstracto dependiente que se ejecuta antes de procesar una solicitud HTTP.
     */
    abstract public function before(array $params): void;

    /**
     * Método abstracto dependiente que se ejecuta después de procesar una solicitud HTTP.
     */
    abstract public function after(array $params): void;
}
